import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author wuwenfa
 */
public class LruLinkedHashMap<K, V> {

    /**
     * 缓存map
     */
    private LinkedHashMap<K, V> cacheMap;

    /**
     * 当前缓存数量
     */
    private int size;

    /**
     * 构造一个cacheMap，并设置可以缓存的数量
     *
     * @param size
     */
    public LruLinkedHashMap(int size) {
        this.size = size;

        cacheMap = new LinkedHashMap<K, V>(16, 0.75F, true) {
            @Override
            // 重写方法，判断是否删除最久没使用的节点
            protected boolean removeEldestEntry(Map.Entry eldest) {
                if (size + 1 == cacheMap.size()) {
                    return true;
                } else {
                    return false;
                }
            }
        };
    }

    /**
     * 添加缓存
     * @param key
     * @param value
     */
    public void put(K key, V value) {
        cacheMap.put(key, value);
    }

    /**
     * 获取缓存
     * @param key
     * @return
     */
    public V get(K key) {
        return cacheMap.get(key);
    }


    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        Set<Map.Entry<K, V>> entrySet = cacheMap.entrySet();
        for (Map.Entry<K, V> entry : entrySet) {
            sb.append(entry.getKey())
                    .append(":")
                    .append(entry.getValue())
                    .append("<-");
        }

        return sb.toString();
    }
}